package com.foreknow.demo21;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class PersonManager {
  public List<Person> getQueryAll() {
    //创建一个新的集合
    List<Person> list = new ArrayList<>();
    Person person = new Person();
    person.setName("fender");
    list.add(person);
    return list;
  }

  public void getMethod(List<Person> list) {
    for(int i = 0;i<list.size();i++){
      Person person = list.get(i);
      System.out.println(person.getName());
    }
  }

  public static void main(String[] args) {
    PersonManager personManager = new PersonManager();
    //    List<Person> list = personManager.getQueryAll();
    //    for(int i = 0;i<list.size();i++){
    //      Person person = list.get(i);
    //      System.out.println(person.getName());
    //    }
    //    List<Person> list = new ArrayList<>();
    //    Person person = new Person();
    //    person.setName("fender");
    //    list.add(person);
    //    personManager.getMethod(list);

    List<Person> list1 = new ArrayList<>();
    Person p1 = new Person();
    p1.setName("fender");
    Person p2 = new Person();
    p2.setName("jazz");
    list1.add(p1);
    list1.add(p2);

    System.out.println("--------------如何遍历集合--------------");
    //如何遍历集合
    for(int i = 0;i<list1.size();i++){
      Person person = list1.get(i);
      System.out.println(person.getName());
    }

    System.out.println("--------------foreach遍历集合--------------");
    for (Person person:list1) {
      System.out.println(person.getName());
    }

    System.out.println("--------------迭代器(Iterator)遍历集合--------------");
    //Iterator中的常用方法
    //   1. boolean	hasNext()
    //    如果仍有元素可以迭代，则返回 true。
    //   2. E	next()
    //    返回迭代的下一个元素。


   Iterator<Person> iterator = list1.iterator();
   while (iterator.hasNext()){
     Person person = iterator.next();
     System.out.println(person.getName());
   }

   //从条件上来讲
   //1. for循环要知道集合和数组的大小，而且需要有序的，不然就没有办法去遍历
   //2. foreach和iterator不需要知道集合或数组的大小，他们都是得到集合内的每个元素，然后进行处理的
   //从用法上来讲
   //1. for循环一般用来处理比较简单的有序的，可获知大小的集合或数组
   //2. foreach可用于遍历任何集合或数组，而且操作简单。
   //3. Iterator是最强大的，你可以随时修改或删除集合内的元素，并且是在不需要知道元素和集合大小的情况下进行的
   //4.当你需要对不同的容器实现同样的遍历方式的时候，可以使用迭代器

   //从效率上来说，同样遍历一个集合，iterator和foreach不相上下。

  }
}
